/**
 * 修改和扩展引擎源码，自定义引擎组件默认参数
 */
(function () {

    /**修改和扩展引擎源码 */
    (function () {

        /**--------以下修改和扩展可以选择性的开启-------- */
        /**1.button组件按下时候扩展，一般是播放点击音效 */
        function TouchBegan() {
            let _onTouchBegan = cc.Button.prototype["_onTouchBegan"];
            cc.Button.prototype["_onTouchBegan"] = function (event) {
                // let buttonName: string = this.node.name;
                // if (buttonName.indexOf("click") >= 0) {
                //     //播放点击音效？？
                // }

                //原来逻辑
                _onTouchBegan.call(this, event);
            };
        }

        /**2.扩展cc.Component类，preload时候自动寻找对应的属性，避免了拖界面 */
        function componentPreload() {
            let __preload = cc.Component.prototype["__preload"];
            cc.Component.prototype["__preload"] = function () {
                //保证只调用一次
                if (this.__preloaded) return;
                this.__preloaded = true;
                //先调用以前定义的函数
                if(__preload) __preload();
                let self = this;
                //同名节点警告
                let bindNode: Map<string, string> = new Map();
                //排除系统组件
                if (self.__cid__.indexOf("cc.") < 0) {
                    //遍历节点树，找到脚本中同名的属性完成初始化
                    function find(node: cc.Node) {
                        for (let one of node.children) {
                            let name = one.name;
                            //排除cc类型的系统组件
                            if (self[name] && self[name].__cid__ && self[name].__cid__.indexOf("cc.") >= 0) {
                                if (bindNode.has(name)) {
                                    console.error("有多个同名节点被引用！", name);
                                } else {
                                    if (self[name] instanceof cc.Node) {
                                        self[name] = one;
                                        bindNode.set(name, name);
                                    } else {
                                        let component = one.getComponent(self[name].__proto__.constructor);
                                        if (component) {
                                            self[name] = component;
                                            bindNode.set(name, name);
                                        } else {
                                            console.error("没找到对应的组件！", name);
                                        }
                                    }
                                }
                            }
                            find(one);
                        }
                    }
                    find(self.node);
                }
            }
        }

        /**是否开启对应的扩展？ */
        //TouchBegan();
        //componentPreload();
    })();


    /**自定义引擎组件默认参数  
     * 修改后新添加的引擎组件使用新的默认参数，不过你仍然可以在属性面版里面改变组件的属性值
     */
    (function () {

        /**方式1 */
        function change1(component, key, type, value) {
            cc.Class["Attr"].getClassAttrs(component).__proto__["_N$" + key + "$_$" + type] = value;
        }
        /**方式2 */
        function change2(component, key, type, value) {
            cc.Class["Attr"].getClassAttrs(component).__proto__["_" + key + "$_$" + type] = value;
        }
        /**方式3 */
        function change3(component, key, type, value) {
            cc.Class["Attr"].getClassAttrs(component).__proto__[key + "$_$" + type] = value;
        }

        // /**--------以下自定义引擎组件默认参数可以选择性的开启-------- */
        // /**1.改变cc.Label的默认值  */
        // change1(cc.Label, "fontFamily", "default", "微软雅黑");//默认字体：微软雅黑  
        // change1(cc.Label, "horizontalAlign", "default", cc.Label.HorizontalAlign.CENTER);//默认水平对齐方式：居中
        // change1(cc.Label, "verticalAlign", "default", cc.Label.VerticalAlign.CENTER);//默认竖直对齐方式：居中
        // change1(cc.Label, "overflow", "default", 1);//默认字体溢出处理方式：缩放
        // change2(cc.Label, "string", "default", "9999");//默认文字："9999"
        // change2(cc.Label, "enableWrapText", "default", false);//默认是否自动换行：否 

        // /**2.改变cc.Button的默认值  */
        // change1(cc.Button, "transition", "default", cc.Button.Transition.SCALE);//默认过渡类型为：缩放动画
        // change3(cc.Button, "zoomScale", "default", 1.1);//默认缩放大小: 1.1

        // /**3.改变cc.Widget的默认值  */
        // // change3(cc.Widget, "alignMode", "default", cc.Widget.AlignMode.ON_WINDOW_RESIZE);//默认对齐模式为：ON_WINDOW_RESIZE  
        // // change2(cc.Widget, "bottom", "default", 260);// 默认底部对齐像素为：260

    })();


})();

//cc.Class.Attr.setClassAttr(cc.Label, "_fontSize", 'default', 88);
//cc.Class.Attr.getClassAttrs(cc.Label).__proto__._N$fontFamily$_$default = "微软雅黑";
//cc.Class.Attr.setClassAttr(cc.Label, "fontFamily", "default", "微软雅黑");